#include <stdio.h>
#include <stdlib.h>
#define init_size 10

// 定义数据结构体
typedef struct data
{
    int id;
    int grade;
} Data; 

// 定义顺序表结构体
typedef struct sqlist
{
    Data *stu;
    int len;
    int maxsize;
} SqList; 

// 初始化函数
void Init(SqList *L)
{
    L->stu = (Data *)malloc(init_size * sizeof(Data)); // 直接为L->stu分配内存
    if (L->stu == NULL)
    {
        printf("动态内存分配失败!\n");
        exit(1); // 分配失败时退出程序
    }
    L->len = 0;
    L->maxsize = init_size;
}

// 释放内存空间函数
void FreeSqList(SqList *L)
{
    if (L->stu != NULL)
    {
        free(L->stu);  // 先释放L->stu
        L->stu = NULL; // 然后将指针置为NULL，防止野指针
    }
    printf("内存释放成功!\n");
}

// 打印函数
void PrintSqList(SqList *L)
{
    for (int i = 0; i < L->len; i++) 
    {
        printf("%d\t%d\n", L->stu[i].id, L->stu[i].grade);
    }
}

int main(int argc, char const *argv[])
{
    SqList L;
    Init(&L);
    for (int i = 0; i < L.maxsize; i++)
    {
        L.stu[i].grade = 99;
        L.stu[i].id = i + 1;
        L.len = i + 1; // 更新L.len以反映实际存储的元素数量
    }
    PrintSqList(&L);
    FreeSqList(&L); // 释放内存
    return 0;
}